#ifndef COMMAND_BASE_H
#define COMMAND_BASE_H

#include "Commands/Command.h"

#include "Subsystems/Breach.h"
#include "Subsystems/Drivetrain.h"
#include "Subsystems/Climbing.h"
#include "Subsystems/DiscMagnet.h"
#include "Subsystems/DiscHandling.h"
#include "Subsystems/Shooter.h"
#include "Subsystems/ShooterAngle.h"
#include "OI.h"
#include "DashboardClient.h"

/**
 * The base for all commands. All atomic commands should subclass CommandBase.
 * CommandBase stores creates and stores each control system. To access a
 * subsystem elsewhere in your code in your code use CommandBase.examplesubsystem
 */

class OI;
class Breach;
class Drivetrain;
class Climbing;
class DiscMagnet;
class DiscHandling;
class Shooter;
class ShooterAngle;
class DashboardClient;

class CommandBase: public Command {
public:
	CommandBase(const char *name);
	CommandBase();
	static void init();
	// Create a single static instance of all of your subsystems

	static OI *oi;
	static Breach *breach;
	static Drivetrain *drivetrain;
	static Climbing *climbing;
	static DiscMagnet *discMagnet;
	static DiscHandling *discHandling;
	static Shooter *shooter;
	static ShooterAngle *shooterAngle;
	static DashboardClient *client;
};

#endif
